﻿Imports extranet.BE
Imports extranet.DA
'Imports extranet.BC.Utility

Public Class BCUsuario

  Public Shared Sub Cadastrar(ByRef objBEUsuario As BEUsuario)
    Dim objDAUsuario As New DAUsuario
    objDAUsuario.Cadastra(objBEUsuario)
  End Sub

  Public Shared Sub Atualizar(ByVal objBEUsuario As BEUsuario)
    Dim objDAUsuario As New DAUsuario
    objDAUsuario.Atualiza(objBEUsuario)
  End Sub

  Public Shared Sub AtualizarSenha(ByVal objBEUsuario As BEUsuario)
    Dim objDAUsuario As New DAUsuario
    objDAUsuario.AtualizaSenha(objBEUsuario)
  End Sub

  Public Shared Sub Excluir(ByVal objBEUsuario As BEUsuario)
    Dim objDAUsuario As New DAUsuario
    objDAUsuario.Exclui(objBEUsuario)
  End Sub

  Public Shared Function SelecionarLogin(ByVal strUsuario As String, ByVal strSenha As String) As BEUsuario
    Dim objDAUsuario As New DAUsuario(booCondicaoSimilar:=False)
    Dim objBEUsuario As New BEUsuario()

    If strUsuario IsNot Nothing AndAlso strUsuario.Length > 0 AndAlso _
       strSenha IsNot Nothing AndAlso strSenha.Length > 0 Then
      objBEUsuario = objDAUsuario.SelecionaUsuario(New BEUsuario(strUsuario, strSenha))
      If objBEUsuario Is Nothing Then
        Dim objDACandidato As New DACandidato()
        Dim objBECandidato As New BECandidato()
        objBECandidato.Login = strUsuario
        objBECandidato.Senha = strSenha
        objBEUsuario = objDACandidato.selecionarPeloLogin(objBECandidato)
        If objBEUsuario.Nome.Length > 0 Then
          Dim objDAGrupoAcesso As New DAGrupoAcesso()
          Dim objDAGruposAcesso As IList(Of BEGrupoAcesso) = objDAGrupoAcesso.Seleciona(New BEGrupoAcesso(2))
          If objDAGruposAcesso IsNot Nothing AndAlso objDAGruposAcesso.Count > 0 Then
            objBEUsuario.GrupoAcesso = objDAGruposAcesso(0)
          End If
        End If
      Else
        LoadDados(objBEUsuario)
      End If
    End If
    Return objBEUsuario
  End Function

  Public Shared Function Selecionar(ByVal strUsuario As String) As List(Of BEUsuario)
    Dim objDAUsuario As New DAUsuario(booCondicaoSimilar:=False)
    Dim objBEUsuarios As New List(Of BEUsuario)
    If strUsuario IsNot Nothing Then
      objBEUsuarios = objDAUsuario.SelecionaUsuarios(New BEUsuario(strUsuario, Nothing))
      For Each objBEUsuario As BEUsuario In objBEUsuarios
        LoadDados(objBEUsuario)
      Next
    End If
    Return objBEUsuarios
  End Function

  Public Shared Function SelecionarPeloUsuario(ByVal strUsuario As String) As BEUsuario
    Dim objDAUsuario As New DAUsuario(booCondicaoSimilar:=False)
    Dim objBEUsuario As New BEUsuario
    objBEUsuario.Usuario = strUsuario
    Return objDAUsuario.SelecionaUsuario(objBEUsuario)
  End Function

  Public Shared Function SelecionarPeloCPF(ByVal strCPF As String) As BEUsuario
    Dim objDAUsuario As New DAUsuario
    Dim objBEUsuario As New BEUsuario
    objBEUsuario.Cpf = strCPF
    Return objDAUsuario.SelecionaUsuario(objBEUsuario)
  End Function

  Public Shared Function Selecionar(ByVal strNome As String, _
                                    ByVal sortExpression As String, ByVal sortDirection As String) As List(Of BEUsuario)
    Dim objDAUsuario As New DAUsuario
    objDAUsuario.objQuery.Sort = New BESort(sortExpression, sortDirection)
    Dim objBEUsuarios As List(Of BEUsuario) = objDAUsuario.SelecionaUsuarios(New BEUsuario(strNome))
    For Each objBEUsuario As BEUsuario In objBEUsuarios
      LoadDados(objBEUsuario)
    Next
    Return objBEUsuarios
  End Function

  Public Shared Function Selecionar(ByVal strNome As String, _
                                    ByVal intIdFranquia As Integer) As List(Of BEUsuario)
    Dim objDAUsuario As New DAUsuario
    Dim objBEUsuarioConsulta As New BEUsuario(strNome)
    objBEUsuarioConsulta.Franquia.IdFranquia = intIdFranquia
    Dim objBEUsuarios As List(Of BEUsuario) = objDAUsuario.SelecionaUsuarios(objBEUsuarioConsulta)
    For intI As Integer = objBEUsuarios.Count() - 1 To 0 Step -1
      'For Each objBEUsuario As BEUsuario In objBEUsuarios
      Dim objBEUsuario As BEUsuario = objBEUsuarios(intI)
      If objBEUsuario.GrupoAcesso Is Nothing OrElse objBEUsuario.GrupoAcesso.IdGrupo = 0 Then
        objBEUsuarios.Remove(objBEUsuario)
      Else
        LoadDados(objBEUsuario)
      End If
    Next
    Return objBEUsuarios
  End Function

  Public Shared Function SelecionaPeloGrupoAcesso(ByVal intIdGrupoAcesso As Integer) As List(Of BEUsuario)
    Dim objDAUsuario As New DAUsuario
    Dim objBEUsuario As New BEUsuario
    objBEUsuario.GrupoAcesso.IdGrupo = intIdGrupoAcesso
    Dim objBEUsuarios As List(Of BEUsuario) = objDAUsuario.SelecionaUsuarios(objBEUsuario)
    For Each oBEUsuario As BEUsuario In objBEUsuarios
      LoadDados(oBEUsuario)
    Next
    Return objBEUsuarios
  End Function

  Protected Shared Sub LoadDados(ByRef objBEUsuario As BEUsuario)
    If objBEUsuario.GrupoAcesso.IdGrupo > 0 Then
      Dim objDAGrupoAcesso As New DAGrupoAcesso(booCondicaoSimilar:=False)
      Dim objBEGruposAcesso As IList(Of BEGrupoAcesso) = objDAGrupoAcesso.Seleciona(objBEUsuario.GrupoAcesso)
      If objBEGruposAcesso IsNot Nothing And objBEGruposAcesso.Count > 0 Then _
         objBEUsuario.GrupoAcesso = objBEGruposAcesso(0)
    End If
    If objBEUsuario.Franquia.IdFranquia > 0 Then
      Dim objDAFranquia As New DAFranquia(booCondicaoSimilar:=False)
      Dim objBEFranquias As IList(Of BEFranquia) = objDAFranquia.Seleciona(objBEUsuario.Franquia)
      If objBEFranquias IsNot Nothing And objBEFranquias.Count > 0 Then _
         objBEUsuario.Franquia = objBEFranquias(0)
    End If
  End Sub

  Public Shared Function CpfExiste(ByVal strCpf As String) As Boolean
    Dim objDAUsuario As New DAUsuario(booCondicaoSimilar:=False)
    Dim objBEUsuario As New BEUsuario
    objBEUsuario.Cpf = strCpf
    Return objDAUsuario.CpfExiste(objBEUsuario)
  End Function

  Public Shared Function UsuarioExiste(ByVal strUsuario As String) As Boolean
    Dim objDAUsuario As New DAUsuario(booCondicaoSimilar:=False)
    Return objDAUsuario.UsuarioExiste(New BEUsuario(strUsuario, Nothing))
  End Function

End Class
